package tenis;

import exepciones.TenisExepcion;
import tennis.IJugador;
import tennis.IJugable;

public class Partido implements IJugable{

	private Jugador jugador1;
	private Jugador jugador2;
	
	public void iniciarPartido(IJugador jugador1, IJugador jugador2) throws TenisExepcion{
		this.setJugador1((Jugador)jugador1);
		this.setJugador2((Jugador)jugador2);
		if(!this.getJugador1().getSexo().equals(this.getJugador2().getSexo())){
			throw new TenisExepcion("Los jugadrores tienen que ser del mismo sexo");
		}
	}
	public void sumarPunto(IJugador jugador) throws TenisExepcion{		
		Jugador jugadorASumar = (Jugador) jugador;		
		boolean banderaResetar = false;

		if(jugador1.getSexo().equals("F")){
			if(jugador1.getSets() == 2){
				throw new TenisExepcion("Juego terminado \n Gano el jugador " + jugador1.getNombre());	//gano
			}else if(jugador2.getSets() == 2){
				throw new TenisExepcion("Juego terminado \n Gano el jugador " + jugador2.getNombre());	//gano
			}else{
				banderaResetar = sumarLogica(jugadorASumar);
			}
		}else{
			if(jugador1.getSets() == 3){
				throw new TenisExepcion("Juego terminado \n Gano el jugador " + jugador1.getNombre());	//gano
			}else if(jugador2.getSets() == 3){
				throw new TenisExepcion("Juego terminado \n Gano el jugador " + jugador2.getNombre());	//gano
			}else{
				banderaResetar = sumarLogica(jugadorASumar);
			}
		}
		
		if(banderaResetar){
			if(jugadorASumar.getNumero().equals("1")){
				jugador2.resetearPuntaje();
			}else{
				jugador1.resetearPuntaje();
			}
		}
	}
	
	private boolean sumarLogica(Jugador jugadorASumar){
		boolean banderaResetar = false;
		if(jugadorASumar.getNumero().equals("1")){								//sumar jugador1
			if(jugador2.getPuntos() == 45){									//si 2 tiene 45
				if(jugador2.isVentaja()){									//y si tambien tiene ventaja
					jugador2.setVentaja(false);								//se la saco
				}else{
					if(jugador1.getPuntos() == 45){							//si tengo 45
						if(jugador1.isVentaja()){							//y si tengo ventaja
							jugador1.setVentaja(false);
							banderaResetar = jugadorASumar.sumarPuntos();	
						}else{
							jugador1.setVentaja(true);						//me la dejo
						}
					}else{
						banderaResetar = jugadorASumar.sumarPuntos();
					}
				}
			}else{	//si no tiene 45
				banderaResetar = jugadorASumar.sumarPuntos();	//gano 1
			}
		}else{	//sumar jugador2
			if(jugador1.getPuntos() == 45){	//si 2 tiene 45
				if(jugador1.isVentaja()){	//y si tambien tiene ventaja
					jugador1.setVentaja(false);	//se la saco
				}else{
					if(jugador2.getPuntos() == 45){
						if(jugador2.isVentaja()){
							jugador2.setVentaja(false);
							banderaResetar = jugadorASumar.sumarPuntos();
						}else{
							jugador2.setVentaja(true);	//me la dejo						
						}
					}else{
						banderaResetar = jugadorASumar.sumarPuntos();
					}
				}
			}else{	//si no tiene 45
				banderaResetar = jugadorASumar.sumarPuntos();	//gano 1
			}
		}

		return banderaResetar;
	}
	
	public String resultado(){
		String delimiter = ";";
		String[] resultadoJugador1 = this.jugador1.resultado().split(delimiter);
		String[] resultadoJugador2 = this.jugador2.resultado().split(delimiter);
		if(resultadoJugador1[0].equals("45")){
			if(jugador1.isVentaja()){
				resultadoJugador1[0] = "ADV";
			}else{
				resultadoJugador1[0] = "40";			
			}
		}
		if(resultadoJugador2[0].equals("45")){
			if(jugador2.isVentaja()){
				resultadoJugador2[0] = "ADV";
			}else{
				resultadoJugador2[0] = "40";			
			}
		}
		String resultado = resultadoJugador1[0] + "-" + resultadoJugador2[0] + ";" + resultadoJugador1[1] + "-" + resultadoJugador2[1] + ";" + resultadoJugador1[2] + "-" + resultadoJugador2[2];
		System.out.println(resultado);
		return resultado;
	}
	
	public void setPuntos(int jugador1, int jugador2){};
	public void setGames(int jugador1, int jugador2){};
	public void setSets(int jugador1, int jugador2){};
	
	private Jugador getJugador1() {
		return jugador1;
	}
	private void setJugador1(Jugador jugador1) {
		this.jugador1 = jugador1;
	}
	private Jugador getJugador2() {
		return jugador2;
	}
	private void setJugador2(Jugador jugador2) {
		this.jugador2 = jugador2;
	}
}
